
package com.ccc.demoboot.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ccc.demoboot.common.R;
import com.ccc.demoboot.pojo.Area;
import com.ccc.demoboot.service.AreaService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 仓库区控制器
 * 处理与仓库区相关的HTTP请求
 */
@RequestMapping("/area")
@RestController
public class AreaController {

    // 日志记录器
    private static final Logger LOGGER = LoggerFactory.getLogger(AreaController.class);

    // AreaService接口的引用，用于调用仓库区相关的业务逻辑
    private final AreaService areaService;

    @Autowired
    public AreaController(AreaService areaService) {
        this.areaService = areaService;
    }

    /**
     * 分页查询仓库区
     *
     * @param page  当前页码
     * @param pageSize 每页显示的条数，默认为5
     * @return 分页查询结果，包含仓库区信息的分页数据
     */
    @PostMapping("/selectarea/{page}")
    public R selectArea(@PathVariable("page") int page, @RequestParam(defaultValue = "5") int pageSize) {
        PageHelper.startPage(page, pageSize);
        List<Map<String, Object>> list = this.areaService.selectArea();
        PageInfo<Map<String, Object>> menuPageInfo = new PageInfo<>(list);
        return new R().add("pageInfo", menuPageInfo);
    }

    /**
     * 根据条件查询仓库区
     *
     * @param area 查询条件，可以是部分或全部字段
     * @return 满足条件的仓库区列表
     */
    @PostMapping("/searchSelect")
    public R searchSelect(@RequestBody Area area){
        List<Map<String,Object>> list = this.areaService.searchSelect(area.getArea());
        return new R().add("list", list);
    }

    /**
     * 添加新的仓库区
     *
     * @param area 待添加的仓库区对象
     * @return 添加结果，包含是否添加成功的标志
     */
    @PostMapping("/addArea")
    public R addArea(@RequestBody Area area){
        System.out.println(area.toString());
        boolean save = this.areaService.save(area);
        return new R().add("save",save);
    }

    /**
     * 根据id删除仓库区，如果仓库有引用则无法删除
     *
     * @param area 包含要删除的仓库区id的对象
     * @return 删除结果，包含是否删除成功的标志
     */
    @PostMapping("/delArea")
    public R delArea(@RequestBody Area area){
        QueryWrapper<Area> areaQueryWrapper = new QueryWrapper<>();
        areaQueryWrapper.setEntity(area);
        boolean remove = this.areaService.remove(areaQueryWrapper);
        return new R().add("remove",remove);
    }

    /**
     * 根据ID查询该仓库区的一条信息
     *
     * @param area 包含查询ID的仓库区对象
     * @return 查询结果，包含找到的仓库区信息
     */
    @PostMapping("/seloneid")
    public R selOneid(@RequestBody Area area) {
        Area byId = this.areaService.getById(area.getId());
        return new R().add("oneid", byId);
    }

    /**
     * 修改仓库区信息
     *
     * @param area 待修改的仓库区对象
     * @return 修改结果，包含是否修改成功的标志
     */
    @PostMapping("/uparea")
    public R upArea(@RequestBody Area area) {
        System.out.println(area.getArea());
        QueryWrapper<Area> areaQueryWrapper = new QueryWrapper<>();
        areaQueryWrapper.setEntity(area);
        boolean update =this.areaService.updateById(area);
        return new R().add("update", update);
    }

}